package com.ruoyi.project.system.mapper;

import java.util.Arrays;
import java.util.Date;
import java.util.List;

import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.project.system.domain.SysPost;
import tk.mybatis.mapper.additional.insert.InsertListMapper;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.special.InsertUseGeneratedKeysMapper;
import tk.mybatis.mapper.entity.Example;

/**
 * 岗位信息 数据层
 * 
 * @author ruoyi
 */
public interface SysPostMapper extends Mapper<SysPost>, InsertListMapper<SysPost>, InsertUseGeneratedKeysMapper<SysPost>
{
    /**
     * 查询岗位数据集合
     * 
     * @param post 岗位信息
     * @return 岗位数据集合
     */
    default List<SysPost> selectPostList(SysPost post) {
        Example example = new Example(SysPost.class);
        Example.Criteria criteria = example.createCriteria();
        if (StringUtils.isNotEmpty(post.getPostCode())) {
            criteria.andLike("postCode", "%" + post.getPostCode() + "%");
        }
        if (StringUtils.isNotEmpty(post.getStatus())) {
            criteria.andEqualTo("status", post.getStatus());
        }
        if (StringUtils.isNotEmpty(post.getPostName())) {
            criteria.andLike("postName", "%" + post.getPostName() + "%");
        }
        return selectByExample(example);
    }

    /**
     * 根据用户ID获取岗位选择框列表
     * 
     * @param userId 用户ID
     * @return 选中岗位ID列表
     */
    List<Integer> selectPostListByUserId(Long userId);

    /**
     * 查询用户所属岗位组
     * 
     * @param userName 用户名
     * @return 结果
     */
    List<SysPost> selectPostsByUserName(String userName);

    /**
     * 批量删除岗位信息
     * 
     * @param postIds 需要删除的岗位ID
     * @return 结果
     */
    default int deletePostByIds(Long[] postIds) {
        Example example = new Example(SysPost.class);
        example.createCriteria().andIn("postId", Arrays.asList(postIds));
        return deleteByExample(example);
    }

    /**
     * 修改岗位信息
     * 
     * @param post 岗位信息
     * @return 结果
     */
    default int updatePost(SysPost post) {
        post.setUpdateTime(new Date());
        return updateByPrimaryKeySelective(post);
    }

    /**
     * 新增岗位信息
     * 
     * @param post 岗位信息
     * @return 结果
     */
    default int insertPost(SysPost post) {
        post.setCreateTime(new Date());
        return insertSelective(post);
    }

    /**
     * 校验岗位名称
     * 
     * @param postName 岗位名称
     * @return 结果
     */
    default SysPost checkPostNameUnique(String postName) {
        Example example = new Example(SysPost.class);
        example.createCriteria().andEqualTo("postName", postName);
        return selectOneByExample(example);
    }

    /**
     * 校验岗位编码
     * 
     * @param postCode 岗位编码
     * @return 结果
     */
    default SysPost checkPostCodeUnique(String postCode) {
        Example example = new Example(SysPost.class);
        example.createCriteria().andEqualTo("postCode", postCode);
        return selectOneByExample(example);

    }
}
